home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / ultqsrc.zip / ENFORCER.QC < prev    next >
Text File  |  1996-09-24  |  11KB  |  334 lines

  1. /*
  2. ==============================================================================
  3.  
  4. SOLDIER / PLAYER
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd /raid/quake/id1/models/enforcer
  10. $origin 0 -6 24
  11. $base base        
  12. $skin skin
  13.  
  14. $frame stand1 stand2 stand3 stand4 stand5 stand6 stand7
  15.  
  16. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7 walk8 walk9 walk10
  17. $frame walk11 walk12 walk13 walk14 walk15 walk16
  18.  
  19. $frame run1 run2 run3 run4 run5 run6 run7 run8
  20.  
  21. $frame attack1 attack2 attack3 attack4 attack5 attack6
  22. $frame attack7 attack8 attack9 attack10
  23.  
  24. $frame death1 death2 death3 death4 death5 death6 death7 death8
  25. $frame death9 death10 death11 death12 death13 death14
  26.  
  27. $frame fdeath1 fdeath2 fdeath3 fdeath4 fdeath5 fdeath6 fdeath7 fdeath8
  28. $frame fdeath9 fdeath10 fdeath11
  29.  
  30. $frame paina1 paina2 paina3 paina4
  31.  
  32. $frame painb1 painb2 painb3 painb4 painb5
  33.  
  34. $frame painc1 painc2 painc3 painc4 painc5 painc6 painc7 painc8
  35.  
  36. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8
  37. $frame paind9 paind10 paind11 paind12 paind13 paind14 paind15 paind16
  38. $frame paind17 paind18 paind19
  39.  
  40.  
  41. void() Laser_Touch =
  42. {
  43.         local vector org;
  44.     
  45.     if (other == self.owner)
  46.         return;        // don't explode on owner
  47.  
  48.     if (pointcontents(self.origin) == CONTENT_SKY)
  49.     {
  50.         remove(self);
  51.         return;
  52.     }
  53.     
  54.         if (other.reflecttime > time)
  55.               {
  56.                 BounceBack(self.owner,other);
  57.                 return;
  58.               }
  59.  
  60.     sound (self, CHAN_WEAPON, "enforcer/enfstop.wav", 1, ATTN_STATIC);
  61.     org = self.origin - 8*normalize(self.velocity);
  62.  
  63.     if (other.health)
  64.     {
  65.         SpawnBlood (org, self.velocity*0.2, 15);
  66.         if (self.owner.classname == "player")
  67.         T_Damage (other, self, self.owner, 30);   //SHYFT MOD for player dmg
  68.         else
  69.         T_Damage (other, self, self.owner, 15);
  70.  
  71.     }
  72.     else
  73.     {
  74.         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  75.         WriteByte (MSG_BROADCAST, TE_GUNSHOT);
  76.         WriteCoord (MSG_BROADCAST, org_x);
  77.         WriteCoord (MSG_BROADCAST, org_y);
  78.         WriteCoord (MSG_BROADCAST, org_z);
  79.     }
  80.     
  81.     remove(self);    
  82. };
  83.  
  84. void(vector org, vector vec) LaunchLaser =
  85. {
  86.     local    vector    vec;
  87.         if (self.classname == "enforcer")
  88.         sound (self, CHAN_WEAPON, "enforcer/enfire.wav", 1, ATTN_NORM);
  89.     vec = normalize(vec);
  90.         PLaser(vec,self); 
  91. };
  92.  
  93.  
  94.  
  95. void() enforcer_fire =
  96. {
  97.     local vector org;
  98.  
  99.     self.effects = self.effects | EF_MUZZLEFLASH;
  100.     makevectors (self.angles);
  101.     
  102.     org = self.origin + v_forward * 30 + v_right * 8.5 + '0 0 16';
  103.  
  104.     LaunchLaser(org, self.enemy.origin - self.origin);
  105. };
  106.  
  107. //============================================================================
  108.  
  109. void()    enf_stand1    =[    $stand1,    enf_stand2    ] {ai_stand();};
  110. void()    enf_stand2    =[    $stand2,    enf_stand3    ] {ai_stand();};
  111. void()    enf_stand3    =[    $stand3,    enf_stand4    ] {ai_stand();};
  112. void()    enf_stand4    =[    $stand4,    enf_stand5    ] {ai_stand();};
  113. void()    enf_stand5    =[    $stand5,    enf_stand6    ] {ai_stand();};
  114. void()    enf_stand6    =[    $stand6,    enf_stand7    ] {ai_stand();};
  115. void()    enf_stand7    =[    $stand7,    enf_stand1    ] {ai_stand();};
  116.  
  117. void()    enf_walk1    =[    $walk1 ,    enf_walk2    ] {
  118. if (random() < 0.2)
  119.     sound (self, CHAN_VOICE, "enforcer/idle1.wav", 1, ATTN_IDLE);
  120. ai_walk(2);
  121. };
  122. void()    enf_walk2    =[    $walk2 ,    enf_walk3    ] {ai_walk(4);};
  123. void()    enf_walk3    =[    $walk3 ,    enf_walk4    ] {ai_walk(4);};
  124. void()    enf_walk4    =[    $walk4 ,    enf_walk5    ] {ai_walk(3);};
  125. void()    enf_walk5    =[    $walk5 ,    enf_walk6    ] {ai_walk(1);};
  126. void()    enf_walk6    =[    $walk6 ,    enf_walk7    ] {ai_walk(2);};
  127. void()    enf_walk7    =[    $walk7 ,    enf_walk8    ] {ai_walk(2);};
  128. void()    enf_walk8    =[    $walk8 ,    enf_walk9    ] {ai_walk(1);};
  129. void()    enf_walk9    =[    $walk9 ,    enf_walk10    ] {ai_walk(2);};
  130. void()    enf_walk10    =[    $walk10,    enf_walk11    ] {ai_walk(4);};
  131. void()    enf_walk11    =[    $walk11,    enf_walk12    ] {ai_walk(4);};
  132. void()    enf_walk12    =[    $walk12,    enf_walk13    ] {ai_walk(1);};
  133. void()    enf_walk13    =[    $walk13,    enf_walk14    ] {ai_walk(2);};
  134. void()    enf_walk14    =[    $walk14,    enf_walk15    ] {ai_walk(3);};
  135. void()    enf_walk15    =[    $walk15,    enf_walk16    ] {ai_walk(4);};
  136. void()    enf_walk16    =[    $walk16,    enf_walk1    ] {ai_walk(2);};
  137.  
  138. void()    enf_run1    =[    $run1  ,    enf_run2    ] {
  139. if (random() < 0.2)
  140.     sound (self, CHAN_VOICE, "enforcer/idle1.wav", 1, ATTN_IDLE);
  141. ai_run(18);};
  142. void()    enf_run2    =[    $run2  ,    enf_run3    ] {ai_run(14);};
  143. void()    enf_run3    =[    $run3  ,    enf_run4    ] {ai_run(7);};
  144. void()    enf_run4    =[    $run4  ,    enf_run5    ] {ai_run(12);};
  145. void()    enf_run5    =[    $run5  ,    enf_run6    ] {ai_run(14);};
  146. void()    enf_run6    =[    $run6  ,    enf_run7    ] {ai_run(14);};
  147. void()    enf_run7    =[    $run7  ,    enf_run8    ] {ai_run(7);};
  148. void()    enf_run8    =[    $run8  ,    enf_run1    ] {ai_run(11);};
  149.  
  150. void()    enf_atk1    =[    $attack1,    enf_atk2    ] {ai_face();};
  151. void()    enf_atk2    =[    $attack2,    enf_atk3    ] {ai_face();};
  152. void()    enf_atk3    =[    $attack3,    enf_atk4    ] {ai_face();};
  153. void()    enf_atk4    =[    $attack4,    enf_atk5    ] {ai_face();};
  154. void()    enf_atk5    =[    $attack5,    enf_atk6    ] {ai_face();};
  155. void()    enf_atk6    =[    $attack6,    enf_atk7    ] {enforcer_fire();};
  156. void()    enf_atk7    =[    $attack7,    enf_atk8    ] {ai_face();};
  157. void()    enf_atk8    =[    $attack8,    enf_atk9    ] {ai_face();};
  158. void()    enf_atk9    =[    $attack5,    enf_atk10    ] {ai_face();};
  159. void()    enf_atk10    =[    $attack6,    enf_atk11    ] {enforcer_fire();};
  160. void()    enf_atk11    =[    $attack7,    enf_atk12    ] {ai_face();};
  161. void()    enf_atk12    =[    $attack8,    enf_atk13    ] {ai_face();};
  162. void()    enf_atk13    =[    $attack9,    enf_atk14    ] {ai_face();};
  163. void()    enf_atk14    =[    $attack10,    enf_run1    ] {ai_face();
  164. SUB_CheckRefire (enf_atk1);
  165. };
  166.  
  167. void()    enf_paina1    =[    $paina1,    enf_paina2    ] {};
  168. void()    enf_paina2    =[    $paina2,    enf_paina3    ] {};
  169. void()    enf_paina3    =[    $paina3,    enf_paina4    ] {};
  170. void()    enf_paina4    =[    $paina4,    enf_run1    ] {};
  171.  
  172. void()    enf_painb1    =[    $painb1,    enf_painb2    ] {};
  173. void()    enf_painb2    =[    $painb2,    enf_painb3    ] {};
  174. void()    enf_painb3    =[    $painb3,    enf_painb4    ] {};
  175. void()    enf_painb4    =[    $painb4,    enf_painb5    ] {};
  176. void()    enf_painb5    =[    $painb5,    enf_run1    ] {};
  177.  
  178. void()    enf_painc1    =[    $painc1,    enf_painc2    ] {};
  179. void()    enf_painc2    =[    $painc2,    enf_painc3    ] {};
  180. void()    enf_painc3    =[    $painc3,    enf_painc4    ] {};
  181. void()    enf_painc4    =[    $painc4,    enf_painc5    ] {};
  182. void()    enf_painc5    =[    $painc5,    enf_painc6    ] {};
  183. void()    enf_painc6    =[    $painc6,    enf_painc7    ] {};
  184. void()    enf_painc7    =[    $painc7,    enf_painc8    ] {};
  185. void()    enf_painc8    =[    $painc8,    enf_run1    ] {};
  186.  
  187. void()    enf_paind1    =[    $paind1,    enf_paind2    ] {};
  188. void()    enf_paind2    =[    $paind2,    enf_paind3    ] {};
  189. void()    enf_paind3    =[    $paind3,    enf_paind4    ] {};
  190. void()    enf_paind4    =[    $paind4,    enf_paind5    ] {ai_painforward(2);};
  191. void()    enf_paind5    =[    $paind5,    enf_paind6    ] {ai_painforward(1);};
  192. void()    enf_paind6    =[    $paind6,    enf_paind7    ] {};
  193. void()    enf_paind7    =[    $paind7,    enf_paind8    ] {};
  194. void()    enf_paind8    =[    $paind8,    enf_paind9    ] {};
  195. void()    enf_paind9    =[    $paind9,    enf_paind10    ] {};
  196. void()    enf_paind10    =[    $paind10,    enf_paind11    ] {};
  197. void()    enf_paind11    =[    $paind11,    enf_paind12    ] {ai_painforward(1);};
  198. void()    enf_paind12    =[    $paind12,    enf_paind13    ] {ai_painforward(1);};
  199. void()    enf_paind13    =[    $paind13,    enf_paind14    ] {ai_painforward(1);};
  200. void()    enf_paind14    =[    $paind14,    enf_paind15    ] {};
  201. void()    enf_paind15    =[    $paind15,    enf_paind16    ] {};
  202. void()    enf_paind16    =[    $paind16,    enf_paind17    ] {ai_pain(1);};
  203. void()    enf_paind17    =[    $paind17,    enf_paind18    ] {ai_pain(1);};
  204. void()    enf_paind18    =[    $paind18,    enf_paind19    ] {};
  205. void()    enf_paind19    =[    $paind19,    enf_run1    ] {};
  206.  
  207. void(entity attacker, float damage)    enf_pain =
  208. {
  209.     local float r;
  210.  
  211.     r = random ();
  212.     if (self.pain_finished > time)
  213.         return;
  214.  
  215.     
  216.     if (r < 0.5)
  217.         sound (self, CHAN_VOICE, "enforcer/pain1.wav", 1, ATTN_NORM);
  218.     else
  219.         sound (self, CHAN_VOICE, "enforcer/pain2.wav", 1, ATTN_NORM);
  220.  
  221.     if (r < 0.2)
  222.     {
  223.         self.pain_finished = time + 1;
  224.         enf_paina1 ();
  225.     }
  226.     else if (r < 0.4)
  227.     {
  228.         self.pain_finished = time + 1;
  229.         enf_painb1 ();
  230.     }
  231.     else if (r < 0.7)
  232.     {
  233.         self.pain_finished = time + 1;
  234.         enf_painc1 ();
  235.     }
  236.     else
  237.     {
  238.         self.pain_finished = time + 2;
  239.         enf_paind1 ();
  240.     }
  241. };
  242.  
  243. //============================================================================
  244.  
  245.  
  246.  
  247.  
  248. void()    enf_die1    =[    $death1,    enf_die2    ] {};
  249. void()    enf_die2    =[    $death2,    enf_die3    ] {};
  250. void()    enf_die3    =[    $death3,    enf_die4    ]
  251. {DropBackpack();};
  252. void()    enf_die4    =[    $death4,    enf_die5    ] {ai_forward(14);};
  253. void()    enf_die5    =[    $death5,    enf_die6    ] {ai_forward(2);};
  254. void()    enf_die6    =[    $death6,    enf_die7    ] {};
  255. void()    enf_die7    =[    $death7,    enf_die8    ] {};
  256. void()    enf_die8    =[    $death8,    enf_die9    ] {};
  257. void()    enf_die9    =[    $death9,    enf_die10    ] {ai_forward(3);};
  258. void()    enf_die10    =[    $death10,    enf_die11    ] {ai_forward(5);};
  259. void()    enf_die11    =[    $death11,    enf_die12    ] {ai_forward(5);};
  260. void()    enf_die12    =[    $death12,    enf_die13    ] {ai_forward(5);};
  261. void()    enf_die13    =[    $death13,    enf_die14    ] {};
  262. void()  enf_die14       =[      $death14,       enf_die14       ] {MakeSolidCorpse ("progs/h_mega.mdl",self.classname);};
  263.  
  264. void()    enf_fdie1    =[    $fdeath1,    enf_fdie2    ] {};
  265. void()    enf_fdie2    =[    $fdeath2,    enf_fdie3    ] {};
  266. void()    enf_fdie3    =[    $fdeath3,    enf_fdie4    ] 
  267. {DropBackpack();};
  268. void()    enf_fdie4    =[    $fdeath4,    enf_fdie5    ] {};
  269. void()    enf_fdie5    =[    $fdeath5,    enf_fdie6    ] {};
  270. void()    enf_fdie6    =[    $fdeath6,    enf_fdie7    ] {};
  271. void()    enf_fdie7    =[    $fdeath7,    enf_fdie8    ] {};
  272. void()    enf_fdie8    =[    $fdeath8,    enf_fdie9    ] {};
  273. void()    enf_fdie9    =[    $fdeath9,    enf_fdie10    ] {};
  274. void()    enf_fdie10    =[    $fdeath10,    enf_fdie11    ] {};
  275. void()  enf_fdie11     =[      $fdeath11,      enf_fdie11      ] {MakeSolidCorpse ("progs/h_mega.mdl",self.classname);};
  276.  
  277.  
  278. void() enf_die =
  279. {
  280. // check for gib
  281.     if (self.health < -35)
  282.     {
  283.         self.enemy.exp = self.enemy.exp + (27 - self.health)*skill;
  284.         self.netname = "progs/h_mega.mdl";
  285.         CorpseDie();
  286.         return;
  287.     }
  288.  
  289. // regular death
  290.     sound (self, CHAN_VOICE, "enforcer/death1.wav", 1, ATTN_NORM);
  291. //        self.skin = 1;
  292.      if (random() > 0.5)
  293.         enf_die1 ();
  294.     else
  295.         enf_fdie1 ();
  296. };
  297.  
  298.  
  299. /*QUAKED monster_enforcer (1 0 0) (-16 -16 -24) (16 16 40) Ambush
  300.  
  301. */
  302. void() monster_enforcer =
  303. {
  304.     if (deathmatch == 1)
  305.     {
  306.         remove(self);
  307.         return;
  308.     }
  309.     
  310.     self.solid = SOLID_SLIDEBOX;
  311.     self.movetype = MOVETYPE_STEP;
  312.  
  313.     setmodel (self, "progs/enforcer.mdl");
  314.  
  315.     setsize (self, '-16 -16 -24', '16 16 40');
  316.     self.health = 80;
  317.         self.alive = TRUE;
  318.         self.classname ="enforcer";
  319.         // 31-39 cells
  320.     self.ammo_cells = random() * 10;
  321.         self.ammo_cells = rint(self.ammo_cells) + 30;
  322.         self.initthink = monster_enforcer;
  323.  
  324.     self.th_stand = enf_stand1;
  325.     self.th_walk = enf_walk1;
  326.     self.th_run = enf_run1;
  327.     self.th_pain = enf_pain;
  328.     self.th_die = enf_die;
  329.     self.th_missile = enf_atk1;
  330.         self.active = 2;
  331.  
  332.     walkmonster_start();
  333. };
  334.